import { Controller, Get, Post, Body, Patch, Param, Delete, Request, Query, UseInterceptors } from '@nestjs/common'
import { UserService } from './user.service'
import { CreateUserDto } from './dto/create-user.dto'
import { UpdateUserDto } from './dto/update-user.dto'
import { LoginBody } from './dto/login-user.dto'
import { CustomRequest } from 'src/type'
import { Roles } from 'src/role/decorator'
import { Role } from 'src/role/enum'

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}

  // 登录
  @Post('login')
  // Body：用于从请求体中提取数据。
  // Request：用于获取完整的请求对象。
  login(@Body() body: LoginBody, @Request() req: CustomRequest) {
    return this.userService.login(body, req)
  }

  // 注册
  @Post('register')
  register(@Body() body: LoginBody, @Request() req: CustomRequest) {
    return this.userService.register(body, req)
  }

  // 修改密码
  @Post('password')
  updatePassword(@Body() body: any, @Request() req: CustomRequest) {
    return this.userService.updatePassword(body, req)
  }

  // 退出
  @Post('logout')
  logout(@Request() req: CustomRequest) {
    return this.userService.logout(req)
  }

  // 获取用户信息
  @Get()
  findUser(@Request() req) {
    return this.userService.findUser(req)
  }

  // 获取菜单
  @Get('menu')
  findMenu(@Request() req) {
    return this.userService.findMenu(req)
  }

  // 注册或者修改信息
  @Patch(':id')
  // Param：用于从路由参数中提取数据。
  update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto, @Request() req) {
    return this.userService.update(+id, updateUserDto, req)
  }

  // 获取学生列表
  @Get('student')
  @Roles(Role.admin, Role.super_admin)
  // Query：用于从查询字符串中提取数据。
  getStudent(@Query() query: { name?: string; phone: string; pageNo: number; PageSize: number }) {
    return this.userService.getStudent(query)
  }

  // 删除学生
  @Delete('student/:id')
  removeStudent(@Param('id') id: string) {
    return this.userService.removeStudent(+id)
  }

  // 获取管理员列表
  @Get('admin')
  @Roles(Role.super_admin)
  getAdmin(@Query() query: { name?: string; phone: string; pageNo: number; PageSize: number }) {
    return this.userService.getAdmin(query)
  }

  // 新增管理员
  @Post('add_admin')
  @Roles(Role.super_admin)
  create(@Body() createUserDto: CreateUserDto) {
    return this.userService.addAdmin(createUserDto)
  }

  // 删除老师
  @Delete('admin/:id')
  removeAdmin(@Param('id') id: string) {
    return this.userService.removeAdmin(+id)
  }

  // 超级管理员首页的各种职位的数量
  @Get('role')
  findRole() {
    return this.userService.getRole()
  }

  // 各个教育的数量
  @Get('edu')
  findEdu() {
    return this.userService.getEdu()
  }

  // 各个技术栈的数量
  @Get('techStack')
  findTechStack() {
    return this.userService.getTechStack()
  }

  // 试卷是否被批改的数量
  @Get('correct')
  findCorrect() {
    return this.userService.getCorrect()
  }
}
